package com.scott.ch080;

import redis.clients.jedis.Jedis;

import java.util.Random;

/**
 * @author 黄后林
 * @version 1.0
 * @note 手机验证码
 * @date 2022-03-25 16:01:06
 *   ○ 1、输入手机号，点击发送后随机生成6位数字码、2分钟有效。
 *   ○ 2、输入验证码，点击验证，返回成功或失败。
 *   ○ 3、每个手机号每天只能发送3次。
 *
 * 127.0.0.1:6379> get phoneCode:13267128038
 * "319230"
 *
 * 127.0.0.1:6379> get phoneCounter:13267128038
 * "1"
 */
public class PhoneCode {

    public static void main(String[] args) {

       //模拟验证码的发送
        putCodeToRedis("13267128038");

        //checkCode("13267128038","338328");

    }

    private static  void checkCode(String phone,String code){

        //1 从redis中获取验证码
        //1、连接上Redis6
        Jedis jedis = new Jedis("192.168.88.129", 6379);

        //手机验证码的key
        String phoneCode="phoneCode:"+phone;

        String redisCode = jedis.get(phoneCode);

        if(redisCode.equals(code)){
            System.out.println("成功");
        }else{
            System.out.println("失败");
        }

        jedis.close();



    }


    //每个手机每天只能发送3次、验证码放到redis中、并设置验证码的过期时间为120秒
    private static void putCodeToRedis(String phone){

        //1、连接上Redis6
        Jedis jedis = new Jedis("192.168.88.129", 6379);

        //手机发送次数的key
        String phoneCounter = "phoneCounter:"+phone;

        //取到手机发送的次数
        String counter = jedis.get(phoneCounter);
        if(counter == null){
            //表示第1次发送  1天过期  因为第1次发送 所以次数为1
            jedis.setex(phoneCounter,24*60*60,"1");
        }else if(Integer.parseInt(counter) < 3){
            //不是第1次发送 但是已发送的次数小于3
            jedis.incr(phoneCounter);
        }else{
            //已经发送了3次 不能再次发送
            System.out.println("今天的发送次数已经超过3次、不能再次发送");
            jedis.close();
            return ;
        }


        //手机验证码的key
        String phoneCode="phoneCode:"+phone;
        String randomCode = getCode();

        //把6位验证码放到redis中 并让120秒后过期
        jedis.setex(phoneCode,120,randomCode);

        jedis.close();



    }

    // 生成6位的手机验证码
    private static  String getCode(){
        Random random = new Random();
        String code="";
        for(int index=1;index<=6;index++){
            int c = random.nextInt(10);
            code = code +c;
        }
        return code;
    }
}
